#include <iostream>
#include <vector>
#include <functional>

void sort_nums(std::vector<int>& nums, std::function<void(std::vector<int>&)> function);

void bubble_sort(std::vector<int>& nums);
void insert_sort(std::vector<int>& nums);
void shell_sort(std::vector<int> &nums);
void select_sort(std::vector<int>& nums);
void merge_sort(std::vector<int>& nums);
void quick_sort(std::vector<int>& nums);
void heap_sort(std::vector<int>& nums);
void counting_sort(std::vector<int>& nums);
void bucket_sort(std::vector<int>& nums);
void radix_sort(std::vector<int> &nums);

// utils function
void merge(std::vector<int> &nums, int left, int right);
void quick_sort_recursion(std::vector<int> &nums, int left, int right);
